www.gusucode.com > VC 2D游戏编辑器-源码程序 > VC 2D游戏编辑器-源码程序/code/game_Source/GameLib/Graphics/drawInit.cpp
//Download by http://www.NewXing.com ///////////////// // drawInit.h : DDRAW初始化 // // 版本0010 : 二零零三年七月四日 // // written by : Huang LunXin // // Compiler : Visual C++ 6.0 // // Copyright : IcePoint 2003 ///////////////// // 此文件用来初始化DDRAW #include <ddraw.h> #include "..\\define.h" #include "draw_globle.h" #include "..\\globle.h" #include "..\\other_func.h" #include "..\\globle_func.h" bool InitDirectDraw() { DDSURFACEDESC2 ddsd; ghRet=DirectDrawCreateEx(NULL,(void**)&lpDD,IID_IDirectDraw7,NULL); DD_ASSERT(ghRet,"CreateDirectDraw"); ghRet=lpDD->SetCooperativeLevel(hwnd,DDSCL_NORMAL); // ghRet=lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT); // DD_ASSERT(ghRet,"Set Cooperative Level"); // ghRet= lpDD->SetDisplayMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_COLOR,0,0); // DD_ASSERT(ghRet,"Set Display Mode"); DD_INIT(ddsd); ddsd.dwSize = sizeof( ddsd ); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; ghRet = lpDD->CreateSurface( &ddsd, &DDS[SPrimary], NULL ); DD_ASSERT(ghRet,"Create Primary"); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = SCREEN_WIDTH; ddsd.dwHeight = SCREEN_HEIGHT; ghRet = lpDD->CreateSurface( &ddsd, &DDS[SBuffer], NULL ); DD_ASSERT(ghRet,"Create Buffer"); ghRet = lpDD->CreateSurface( &ddsd, &DDS[SBack], NULL ); /* DD_ASSERT(ghRet,"Create Back"); ghRet = lpDD->CreateSurface( &ddsd, &DDS[SBack1], NULL ); DD_ASSERT(ghRet,"Create Back1"); */ ddsd.dwWidth = SCREEN_WIDTH/32*32+64; ddsd.dwHeight = SCREEN_HEIGHT/32*32+64; ghRet = lpDD->CreateSurface( &ddsd, &DDS[SMap], NULL ); DD_ASSERT(ghRet,"Create Map"); ddsd.dwWidth = 3*32; ddsd.dwHeight = 3*32; ghRet = lpDD->CreateSurface( &ddsd, &DDS[SMapAlpha], NULL ); DD_ASSERT(ghRet,"Create MapAlpha"); ddsd.dwWidth = SCREEN_WIDTH>>3; ddsd.dwHeight = SCREEN_HEIGHT>>3; ghRet = lpDD->CreateSurface( &ddsd, &DDS[SGameImage], NULL ); DD_ASSERT(ghRet,"Create SGameImage"); DDPIXELFORMAT DDPixelFormat; DD_INIT(DDPixelFormat); ghRet= DDS[SPrimary]->GetPixelFormat(&DDPixelFormat); DD_ASSERT(ghRet,"Get Pixel Format"); ghRet=DDS[SPrimary]->QueryInterface(IID_IDirectDrawGammaControl,(void**)&lpDDGammaControl); DD_ASSERT(ghRet,"Queuy Gamma Interface"); ghRet=lpDDGammaControl->GetGammaRamp(0,&ddGammaStart); DD_ASSERT(ghRet,"Get Gamma Ramp"); DDBLTFX ddBltFx; ddBltFx.dwSize=sizeof(DDBLTFX); ddBltFx.dwFillColor=0; DDS[SPrimary]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx); DDS[SBuffer]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx); DDS[SBack]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx); // DDS[SBack1]->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx); if(SCREEN_COLOR == 32) { MsgBox("对不起,本游戏只支持16位真彩色,请将系统设为16位真彩色后在试一次!"); PostQuitMessage(-1); } else { if(SCREEN_COLOR == 24) { MsgBox("对不起,本游戏只支持16位真彩色,请将系统设为16位真彩色后在试一次!"); PostQuitMessage(-1); } else { if(SCREEN_COLOR == 16) { if((DDPixelFormat.dwGBitMask>>5)==0x1f)//00000011111 { SetGamePixelFormat(555); } else { if((DDPixelFormat.dwGBitMask>>5)==0x3f)//00000111111 { SetGamePixelFormat(565); } } } } } return true; }